package sys

import (
	"lib/structs/base"
	"lib/structs/tables"
	"lib/utils"
)

type LoginAccount struct {
	Username string `json:"username" form:"username"`
	Password string `json:"password" form:"password"`
	VeryCode
}

type VeryCode struct {
	Key   string `json:"key"`
	Value string `json:"value"`
}

type LoginSuccess struct {
	Username string   `json:"username"`
	Roles    []string `json:"roles"`
	Token    string   `json:"token"`
	Expires  int64    `json:"expires,string"`
}

// PageMenuNode 页面菜单节点
type PageMenuNode struct {
	Id        int64  `json:"id,string"`
	Path      string `json:"path"`
	Name      string `json:"name"`
	Component string `json:"component"`
	Redirect  string `json:"redirect"`
	Meta      struct {
		Icon      string   `json:"icon"`
		Title     string   `json:"title"`
		KeepAlive bool     `json:"keepAlive"`
		ShowLink  bool     `json:"showLink"`
		Rank      int      `json:"rank"`
		Roles     []string `json:"roles"`
	} `json:"meta"`
	Children []PageMenuNode `json:"children"`
}

// AddUserForm 添加用户是需要用到的结构体
type AddUserForm struct {
	Username  string                 `json:"username"`
	Password  string                 `json:"password"`
	Status    int                    `json:"status"`
	AccountLv int                    `json:"accountLv"`    // 账号级别
	OrgId     int64                  `json:"orgId,string"` // 部门
	Nickname  string                 `json:"nickname" `    // 昵称
	Email     string                 `json:"email" `       // 邮箱
	CityCode  string                 `json:"cityCode"`     // 城市编码
	RoleIds   utils.StringArrayInt64 `json:"roleIds"`
}

type UpdatePasswordForm struct {
	OldPassword string `json:"oldPassword"`
	NewPassword string `json:"newPassword"`
}

type UpdateUserInfoForm struct {
	UserId    int64  `json:"userId,string"`
	Status    int    `json:"status"`
	AccountLv int    `json:"accountLv"`    // 账号级别
	OrgId     int64  `json:"orgId,string"` // 部门
	Nickname  string `json:"nickname" `    // 昵称
	Email     string `json:"email" `       // 邮箱
	CityCode  string `json:"cityCode"`     // 城市编码
}

type SearchUser struct {
	Username string `form:"username,omitempty"`
	OrgId    int64  `form:"orgId,string"`
	base.Page
}

type UserDto struct {
	tables.User
	OrgName string `json:"orgName"`
}

type UserBindOrg struct {
	UserId int64                  `json:"userId,string"`
	OrgIds utils.StringArrayInt64 `json:"orgIds"`
}

type UserBindRole struct {
	UserId  int64                  `json:"userId,string"`
	RoleIds utils.StringArrayInt64 `json:"roleIds"`
}
